package cn.est.utils;

import cn.est.constants.Constants;
import org.apache.commons.lang3.StringUtils;

import java.util.*;

/**
 * @Description 关于集合处理的一些工具类
 * @Date 2019-08-16 16:42
 * @Author Liujx
 * Version 1.0
 **/
public class MyCollectionUtils {
    
    /**
     * 根据传入的字符串和切割方式返回一个object的集合
     * @param s
     * @param cut
     * @return
     * @author: liujx
     * @date: 2016年5月10日 下午3:36:30
     */
    public static List<Object> string2ObjectList(String s, String cut) {
        if(StringUtils.isBlank(s) ){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = s.trim();
        String[] arr = s_temp.split(cut);
        List<Object> list = new ArrayList<Object>();
        if(arr==null || arr.length<=0){
            return null;
        }
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                list.add(l);
            }
        }
        return list;
    }

    /**
     * 根据传入的字符串和切割方式返回一个Integer的集合
     * @param s
     * @param cut
     * @return
     * @author: liujx
     * @date: 2016年5月10日 下午3:36:30
     */
    public static List<Integer> string2IntegerList(String s,String cut) {
        if(StringUtils.isBlank(s) ){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = s.trim();
        String[] arr = s_temp.split(cut);
        List<Integer> list = new ArrayList<Integer>();
        if(arr==null || arr.length<=0){
            return null;
        }
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                try {
                    list.add(Integer.parseInt(l));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                    continue;
                }
            }
        }
        return list;
    }


    /**
     * 将传入的集合用给定的连接符拼接成新的字符串并返回
     * @param list
     * @param cut
     * @return
     * @author: liujx
     * @date: 2016年7月11日 下午2:16:34
     */
    public static String List2String(List list, String cut) {
        StringBuilder s = null;
        String result = null;
        if(cut == null){
            throw new RuntimeException();
        }

        if(list != null && list.size()> 0 ){
            s = new StringBuilder();
            for(int i=0; i<list.size(); i++){
                if(i== list.size()-1){
                    s.append(list.get(i));
                }else{
                    s.append(list.get(i)+cut);
                }
            }
            result = s.toString();
        }
        return result;
    }


    /**
     * 将传入的集合用“,”逗号拼接成新的字符串并返回
     * @param list
     * @return
     * @author: liujx
     * @date: 2016年7月11日 下午2:16:34
     */
    public static String List2String(List<Object> list) {
        StringBuilder s = null;
        String result = null;
        if(list!=null && list.size()>0){
            s = new StringBuilder();
            for(Object obj:list){
                s.append(obj+",");
            }
            result = s.substring(0, s.length()-1);
        }
        return result;
    }



    /**
     * 根据传入的字符串和切割方式返回一个Integer的集合
     * @param s
     * @param cut
     * @return
     * @author: liujx
     * @date: 2016年5月10日 下午3:36:30
     */
    public static Set<Integer> string2IntegerSet(String s, String cut) {
        if(StringUtils.isBlank(s) ){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = s.trim();
        String[] arr = s_temp.split(cut);
        Set<Integer> list = new HashSet<Integer>();
        if(arr==null || arr.length<=0){
            return null;
        }
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                try {
                    list.add(Integer.parseInt(l));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                    continue;
                }
            }
        }
        return list;
    }


    /**
     * 根据传入的字符串和切割方式返回一个Long的集合
     * @param s
     * @param cut
     * @return
     */
    public static Set<Long> string2LongSet(String s, String cut) {
        if(StringUtils.isBlank(s) ){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = s.trim();
        String[] arr = s_temp.split(cut);
        Set<Long> list = new HashSet<Long>();
        if(arr==null || arr.length<=0){
            return null;
        }
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                try {
                    list.add(Long.parseLong(l));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                    continue;
                }
            }
        }
        return list;
    }


    /**
     * 根据传入的字符串和切割方式返回一个object的集合
     * @param s
     * @param cut
     * @return
     * @author: liujx
     * @date: 2016年5月10日 下午3:36:30
     */
    public static List<String> string2StringList(String s,String cut) {
        if(StringUtils.isBlank(s)){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = s.trim();
        String[] arr = s_temp.split(cut);
        List<String> list = new ArrayList<String>();
        if(arr==null || arr.length<=0){
            return null;
        }
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                list.add(l);
            }
        }
        return list;
    }

    /**
     * set转数组
     * @param set
     * @return
     * @author: liujx
     * @date: 2016年7月11日 下午2:57:26
     */
    public static  Integer[] set2Arr(Set<Integer> set){
        if(set!=null && set.size()>0){
            Integer [] arr = new Integer[set.size()];
            Object[] objs = set.toArray();
            for(int i = 0; i< objs.length; i++){
                arr[i] = (Integer) objs[i];
            }

            return arr;
        }else{
            return null;
        }
    }

    /**
     * list转数组
     * @param lineList
     * @return
     * @author: liujx
     * @date: 2016年7月1日 下午5:46:37
     */
    public static Integer[] list2Arr(List<Integer> lineList){
        if(lineList!=null && lineList.size()>0){
            Integer [] arr = new Integer[lineList.size()];
            Object[] objs = lineList.toArray();
            for(int i = 0; i< objs.length; i++){
                arr[i] = (Integer) objs[i];
            }
            return arr;
        }else{
            return null;
        }
    }

    /**
     * 将传入的set集合转换为字符串，并去掉两旁的“[]”
     * @param set
     * @return
     * @author: liujx
     * @date: 2016年7月28日 下午2:42:06
     */
    public static String set2String(Set<Integer> set){

        String s= null;
        if(set!=null && set.size()> 0){
            s = set.toString();
            s = s.replace("[", "");
            s = s.replace("]", "");
            s.trim();
        }
        return s;
    }

    /**
     * Description: 根据传入的字符串和切割方式返回一个map集合
     * @param str	需要分隔字符串，字符串每个分隔符之间必须是key=value形式；例如："key1=1&key2=2"
     * @param cut	分隔符
     * @return
     * @author shijb
     * @since 2016年9月28日 上午11:51:18
     */
    public static Map<String,Object> string2Map(String str,String cut){
        if(StringUtils.isBlank(str) ){
            return null;
        }
        if(StringUtils.isBlank(cut)){
            cut = Constants.Connnector.COMMA_;
        }
        String s_temp = str.trim();
        String[] arr = s_temp.split(cut);
        if(arr==null || arr.length<=0){
            return null;
        }
        Map<String,Object> map = new HashMap<>();
        for(String l : arr){
            if(!StringUtils.isBlank(l)){
                String key = l.split("=")[0];
                Object value = l.split("=")[1];
                map.put(key, value);
            }
        }
        return map;
    }

    /**
     * Description: 返回两个集合中相同的元素，如果有一个集合是null，那么返回null,
     * 				如果两个集合都不是null但是没有相同的元素，那么返回空集合
     * @param list1
     * @param list2
     * @return
     * @author liujx
     * @since 2016年10月20日 上午11:01:26
     */
    public static List<Integer> containsList(List<Integer> list1 ,List<Integer> list2){
        List<Integer> list = null;

        if(list1 !=null && list2 !=null){
            list = new ArrayList<Integer>();
            for(Integer i1: list1){
                if(i1 !=null){
                    if(list2.contains(i1)){
                        list.add(i1);
                    }
                }
            }
        }
        return list;
    }

    /**
     * Description: 创建一个简单的map对象(空的map)
     * @return
     * @author liujx
     * @since 2017年5月24日 下午1:18:09
     */
    public static Map<String,Object> createSimpleMap(){
        return new HashMap<String,Object>();
    }

    /**
     * Description: 创建一个简单的map对象
     * @param key
     * @param value
     * @return
     * @author liujx
     * @since 2017年5月24日 下午1:18:09
     */
    public static Map<String,Object> createSimpleMap(String key, Object value){
        Map<String,Object> conditions = null;
        if(key !=null && !key.equals("")){
            conditions = new HashMap<String,Object>();
            conditions.put(key, value);
        }
        return conditions;
    }

    /**
     * Description: 判断集合中是否有重复的值
     * @param list
     * @return
     * @author liujx
     * @since 2017年8月9日 下午1:49:01
     */
    public static boolean hasExist(List list){
        for (int i = 0; i < list.size() - 1; i++)	    {
            for (int j = i + 1; j < list.size(); j++){
                if (list.get(i).equals(list.get(j))){
                    return false;
                }
            }
        }
        return true;
    }
}
